65장. Aurora — 클라우드 네이티브 RDS
이 장에서 말하고자 하는 것
RDS는 기존 관계형 DB 엔진을 그대로 관리해주는 서비스다.
AWS는 한 발 더 나아가
“클라우드 환경에 맞춰 새로 설계한” 관계형 DB를 만들었다.
Amazon Aurora
다.
Aurora는 MySQL · PostgreSQL 과 호환 되지만
내부 구조는 완전히 다르다.
1. Aurora가 다른 점
스토리지가 분리되어 있다
일반 RDS:
[DB 인스턴스] = 컴퓨트 + 스토리지 한 묶음
Aurora:
[Writer · Reader 인스턴스]
↓ 공유
[Aurora Storage Layer (10GB 단위로 6 AZ에 분산 복제)]
- 스토리지가 자동 확장 (10GB → 최대 128TB)
- 6중 복제 (3 AZ × 2)
- 한 노드가 죽어도 스토리지는 살아 있음
Replica가 같은 스토리지를 본다
Writer ──┐
├─ 같은 스토리지를 공유
Reader 1 ┤
Reader 2 ┘
- Replica 복제 지연이 매우 작다 (보통 < 10ms)
- Replica 추가가 빠르다 (스토리지를 새로 만들지 않으므로)
2. RDS vs Aurora 핵심 비교
| 항목 | RDS | Aurora |
|---|---|---|
| 호환 엔진 | PG · MySQL · Oracle 등 | PG · MySQL 호환 |
| 스토리지 | 인스턴스에 붙음 | 분리된 클러스터 스토리지 |
| 복제 지연 | 수 초까지 | 보통 < 10ms |
| Replica 추가 속도 | 느림 | 빠름 |
| 최대 스토리지 | 64 TB (엔진별) | 128 TB |
| 비용 | 일반적으로 더 쌈 | 약간 더 비쌈 |
| 페일오버 | 60~120초 | 30초 내외 |
3. Aurora Serverless v2
Aurora는 서버리스 옵션을 제공한다.
워크로드에 따라 ACU (Aurora Capacity Unit) 가 자동 확장
0.5 ACU ~ 128 ACU 범위
- 트래픽 없으면 작게, 폭증하면 자동 확장
- 개발/스테이징 · 들쭉날쭉한 워크로드에 적합
“들쭉날쭉” + “관계형” 이면 Aurora Serverless v2 가 답일 수 있다
4. Aurora Global Database
여러 리전에 클러스터를 두고 통합 관리할 수 있다.
[ap-northeast-2: Primary 리전]
↓ 빠른 복제 (보통 < 1초)
[us-east-1: Secondary 리전 (읽기)]
- 리전 간 복제 지연이 매우 작다
- 리전 전체 장애 시 다른 리전을 승격 (DR)
5. 어떤 걸 고를까 — RDS vs Aurora
간단하고 비용을 최대한 낮추고 싶다 → RDS
복제 지연을 짧게 두고 싶다 → Aurora
Replica를 빠르게 늘리고 싶다 → Aurora
들쭉날쭉한 워크로드 → Aurora Serverless v2
글로벌 / DR이 중요 → Aurora Global Database
Oracle · SQL Server 호환 필요 → RDS (Aurora 미지원)
6. 우리 서비스에서
이 책의 척추 구조에서는 두 선택지가 다 자연스럽다.
초기 단계: RDS PostgreSQL Multi-AZ
중대형 단계: Aurora PostgreSQL 호환으로 마이그레이션
글로벌 단계: Aurora Global Database
시작은 RDS, 자라면 Aurora — 두 단계 진화가 흔하다
7. 직접 확인해보기 — CLI
Aurora 클러스터 만들기
aws rds create-db-cluster \
--db-cluster-identifier orders-aurora \
--engine aurora-postgresql \
--engine-version 16 \
--master-username appadmin \
--manage-master-user-password \
--db-subnet-group-name private-subnets \
--vpc-security-group-ids sg-xxx
Writer · Reader 인스턴스 추가
aws rds create-db-instance \
--db-instance-identifier orders-aurora-writer \
--db-cluster-identifier orders-aurora \
--engine aurora-postgresql \
--db-instance-class db.r6g.large
aws rds create-db-instance \
--db-instance-identifier orders-aurora-reader-1 \
--db-cluster-identifier orders-aurora \
--engine aurora-postgresql \
--db-instance-class db.r6g.large
8. 코드로는 이렇게 생겼다 — Terraform
resource "aws_rds_cluster" "orders" {
cluster_identifier = "orders-aurora"
engine = "aurora-postgresql"
engine_version = "16"
master_username = "appadmin"
manage_master_user_password = true
db_subnet_group_name = aws_db_subnet_group.main.name
vpc_security_group_ids = [aws_security_group.db.id]
backup_retention_period = 7
deletion_protection = true
}
resource "aws_rds_cluster_instance" "writer" {
identifier = "orders-aurora-writer"
cluster_identifier = aws_rds_cluster.orders.id
engine = aws_rds_cluster.orders.engine
instance_class = "db.r6g.large"
publicly_accessible = false
}
resource "aws_rds_cluster_instance" "reader" {
identifier = "orders-aurora-reader-1"
cluster_identifier = aws_rds_cluster.orders.id
engine = aws_rds_cluster.orders.engine
instance_class = "db.r6g.large"
publicly_accessible = false
}
Aurora 클러스터의 두 엔드포인트:
cluster_endpoint— Writerreader_endpoint— Reader 로드 밸런싱
9. 두 엔드포인트의 운영
Writer 엔드포인트 → 쓰기 + 강한 일관성 읽기
Reader 엔드포인트 → 읽기 (여러 Reader에 분산)
Writer 페일오버가 일어나면 cluster_endpoint가 자동으로 새 Writer를 가리킨다.
애플리케이션이 cluster_endpoint를 쓰면 페일오버에 따로 신경 쓸 게 거의 없다
10. 이렇게 쓰면 망한다 — 안티패턴
안티패턴 1. Aurora에 RDS와 똑같은 사고로 접근
Aurora의 빠른 Replica · Serverless · Global 같은 강점을 안 쓰면 그냥 더 비싼 RDS가 된다.
안티패턴 2. Reader 엔드포인트로 강한 일관성 읽기를 보낸다
복제 지연이 작아도 0은 아니다.
방금 만든 데이터를 즉시 보는 화면은 Writer로
안티패턴 3. Aurora Serverless v1 을 새로 시작한다
v1은 사실상 deprecated. 신규는 무조건 v2.
안티패턴 4. Aurora 클러스터를 한 AZ에만 둔다
서브넷 그룹이 한 AZ만 가지면 Aurora의 6중 복제 의미가 줄어든다.
11. 한 줄로 정리
Aurora는 스토리지가 분리된 클라우드 네이티브 관계형 DB이며,
복제 지연 · 빠른 Replica · 서버리스 · 글로벌이 RDS와 결정적으로 다른 점이다
12. 이 장의 핵심 정리
- Aurora는 RDS와 호환되지만 내부 구조가 다른 DB다.
- 스토리지가 분리돼 있어 Replica 추가가 빠르고 복제 지연이 작다.
- Aurora Serverless v2는 들쭉날쭉한 워크로드에 적합하다.
- Aurora Global Database로 리전 간 복제·DR을 다룰 수 있다.
- 시작은 RDS, 자라면 Aurora 가 흔한 진화 경로다.
- cluster_endpoint / reader_endpoint 두 엔드포인트 운영이 표준이다.